/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;

import com.akcess.vo.*;
import com.akcess.exception.*;
import manejadores.*;
import java.util.*;
import java.sql.*;
import java.sql.Date;

/**
 *
 * @author Alejandro
 */
public class GestionarEventos extends HttpServlet {

    private static final String dirBASE = "jsp/Eventos";

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet GestionarUbicaciones</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet GestionarUbicaciones at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String accion = request.getParameter("hacer");
        request.setAttribute("modulo", "Eventos");
        if (accion.equals("Agregar")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/AgregarEvento.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("opAgregar")) {
            if (this.AgregarEvento(request, response)) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarEventos.jsp");
                dispatcher.forward(request, response);
            } else {
                request.setAttribute("Error", "La Ubicacion no puede ser Creada, posiblemente ya existe o ingreso mal los datos...");
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/AgregarEvento.jsp");
                dispatcher.forward(request, response);
            }
        }
        if (accion.equals("Listar")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarEventos.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("Modificar")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarModificarEventos.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("Borrar")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarBorrarEventos.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("opModificar")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ModificarEvento.jsp");
            dispatcher.forward(request, response);
        }
        
        if (accion.equals("modificacion")) {
            if (this.ModificarEvento(request, response)) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarModificarEventos.jsp");
                dispatcher.forward(request, response);
            } else {
                request.setAttribute("Error", "La Ubicacion no puede ser Modificada, posiblemente modifico mal algunos de los datos...");
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ModificarEvento.jsp");
                dispatcher.forward(request, response);
            }
        }
        if (accion.equals("opBorrar")) {
            if (this.BorrarEvento(request, response)) {
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarBorrarEventos.jsp");
                dispatcher.forward(request, response);
            } else {
                request.setAttribute("Error", "El evento no puede ser Borrado, debido ha que existen otras entidades que la utilizan...");
                RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE + "/ListarBorrarEventos.jsp");
                dispatcher.forward(request, response);
            }
        }


    }

    /** 
     * Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    /**
     * Este metodo permite agregar un nuevo evento al Sistema, los datos son obtenidos por medio del Request, lo q se 
     * obtiene del mismo son el Nombre de Evento, la Descripcion del Evento y el si el evento afecta a la disponibilidad del recurso.
     * @param request
     * @param response
     * @return Retorna un booleano, true si se agrego efectivamente el evento y false en otro caso.
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected boolean AgregarEvento(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Evento evento = new Evento();
            evento.setNombre(request.getParameter("Nombre"));            
            evento.setDescripcion(request.getParameter("Descripcion"));
            evento.setAfectaRecurso(Boolean.parseBoolean(request.getParameter("Afecta")));

            HttpSession session = request.getSession(false);
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorEventos manejador = new ManejadorEventos(cone);
                    manejador.AgregarEvento(evento);
                    return true;
                }
            }
            return false;
        } catch (Exception ex) {
            return false;
        }
    }

    /**
     * Este metodo se encarga de realizar el borrado fisico de un evento siempre y cuando este no se encuentre referenciado desde
     * la tabla Registro_evento. En el Request tenemos el id del evento que queremos borrar.
     * @param request
     * @param response
     * @return Retorna un booleano, true si se borro efectivamente el evento y false en otro caso.
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected boolean BorrarEvento(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            int idEvento = Integer.parseInt(request.getParameter("id"));
            HttpSession session = request.getSession(false);
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorEventos manejador = new ManejadorEventos(cone);
                    manejador.BorrarEvento(idEvento);
                    return true;
                }
            }
            return false;
        } catch (Exception ex) {
            return false;
        }
    }

    /**
     * Este metodo se encarga de realizar la modificacion de un evento cualquiera, los nuevos datos del evento modificado como
     * Nombre de Evento, la Descripcion del Evento y el si el evento afecta a la disponibilidad del recurso son obtenidos
     * mediante el Request y con este tambien se obtiene el id del evento a modificar.
     * 
     * @param request
     * @param response
     * @return
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected boolean ModificarEvento(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Evento evento = new Evento();
            evento.setNombre(request.getParameter("Nombre"));            
            evento.setDescripcion(request.getParameter("Descripcion"));
            evento.setAfectaRecurso(Boolean.parseBoolean(request.getParameter("Afecta")));
            evento.setId_evento(Integer.parseInt(request.getParameter("id")));

            HttpSession session = request.getSession(false);
            if (session != null) {
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                if (cone != null) {
                    ManejadorEventos manejador = new ManejadorEventos(cone);
                    manejador.ModificarEvento(evento);
                    return true;
                }
            }
            return false;
        } catch (Exception ex) {
            return false;
        }
    }
}
